const AC_GAME_OBJECTS=[];//存储游戏对象的数组

export class AcGameObject{
    constructor(){
        AC_GAME_OBJECTS.push(this);
        this.timedelta=0;//相邻两帧的时间间隔
        this.has_called_start=false;//有没有执行过
    }

    start(){//只执行一次

    }

    update() {//每一帧执行一次，除了第一帧
        
    }
    
    on_destroy(){//删除之前执行

    }

    destroy() {//从对象数组中删掉这个对象
        this.on_destroy();

        for(let i in AC_GAME_OBJECTS){
            const obj=AC_GAME_OBJECTS[i];
            if(obj==this){//遍历的对象是当前对象
                AC_GAME_OBJECTS.splice(i);//删除它
                break;
            }
        }
    }
}

let last_timestamp;//上一次执行的时刻
const step = timestamp => {//timestamp是当前时间
    for(let obj of AC_GAME_OBJECTS){//保证是所有对象
        //执行过就更新(update)，没有执行过就执行(start)
        if(!obj.has_called_start){//没有执行过
            obj.has_called_start=true;//标记执行过了
            obj.start();//执行
        }else{//执行过
            obj.timedelta=timestamp-last_timestamp;
            obj.update();//更新
        }
    }

    last_timestamp=timestamp;
    requestAnimationFrame(step)
}

requestAnimationFrame(step)//保证step函数在每次浏览器刷新前执行一次